// 用户相关的状态管理
import { createSlice } from "@reduxjs/toolkit";
import { setToken as _setToken, getToken, removeToken } from "@/utils/token";
import { loginAPI, profileAPI } from "@/apis/user";

const userStore = createSlice({
      name: "user",
      // 据初始化状态
      initialState: {
            token: getToken() || "",
            userInfo: {}
      },
      // 同步修改方法
      reducers: {
            setToken(state, action) {
                  state.token = action.payload
                  // localStorage存一份
                  _setToken(action.payload)
            },
            setUserInfo(state, action) {
                  state.userInfo = action.payload
            },
            clearUserInfo(state) {
                  state.token = ''
                  state.userInfo = {}
                  removeToken()
            }
      }
})


// 异步方法 完成登录获取token
const fetchLogin = (loginForm) => {
      return async (dispatch) => {
            // 1. 发送异步请求
            const res = await loginAPI(loginForm)
            // 2. 提交同步action进行token存入
            dispatch(setToken(res.data.token))
      }
}

// 异步方法 获取个人用户信息
const fetchUserInfo = () => {
      return async (dispatch) => {
            const res = await profileAPI()
            dispatch(setUserInfo(res.data))
      }
}


// 解构出来actionCreate
const { setToken, setUserInfo, clearUserInfo } = userStore.actions;


// 获取reducer函数
const userReducer = userStore.reducer

export { setToken, setUserInfo, clearUserInfo, fetchLogin, fetchUserInfo }
export default userReducer